/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package window;

import dao.DAOFactory;
import data.Empregado;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import services.empregado.EmpregadoServices;
import util.Const;
import util.Util;

/**
 *
 * @author
 * PedroLZ
 */
public class FrmListaEmpregados extends javax.swing.JFrame 
{
	public FrmListaEmpregados() {
		initComponents();
		initForm();
	}

	@SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        tblEmpregados = new javax.swing.JTable();
        btnMostrarEmpregado = new javax.swing.JButton();
        btnExcluirEmpregado = new javax.swing.JButton();
        btnSair = new javax.swing.JButton();
        btnNovoEmpregado = new javax.swing.JButton();
        lblTitulo = new javax.swing.JLabel();
        btnSolicitarEmprestimo = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Empréstimo Consignado - Lista de Empregados");
        setResizable(false);

        tblEmpregados.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        tblEmpregados.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "CPF", "Nome ", "Sexo", "Data de Admissão"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblEmpregados.getTableHeader().setReorderingAllowed(false);
        jScrollPane1.setViewportView(tblEmpregados);
        tblEmpregados.getColumnModel().getColumn(2).setPreferredWidth(10);

        btnMostrarEmpregado.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        btnMostrarEmpregado.setText("Mostrar Empregado");
        btnMostrarEmpregado.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnMostrarEmpregadoActionPerformed(evt);
            }
        });

        btnExcluirEmpregado.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        btnExcluirEmpregado.setText("Excluir Empregados");
        btnExcluirEmpregado.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirEmpregadoActionPerformed(evt);
            }
        });

        btnSair.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        btnSair.setText("Sair");
        btnSair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSairActionPerformed(evt);
            }
        });

        btnNovoEmpregado.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        btnNovoEmpregado.setText("Novo Empregado");
        btnNovoEmpregado.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNovoEmpregadoActionPerformed(evt);
            }
        });

        lblTitulo.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        lblTitulo.setText("Empregados Cadastrados:");

        btnSolicitarEmprestimo.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        btnSolicitarEmprestimo.setText("Solicitar Empréstimo");
        btnSolicitarEmprestimo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSolicitarEmprestimoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(67, 67, 67)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblTitulo)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(btnNovoEmpregado, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(btnExcluirEmpregado, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnMostrarEmpregado, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnSair, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnSolicitarEmprestimo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                .addContainerGap(16, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(40, 40, 40)
                .addComponent(lblTitulo)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(btnMostrarEmpregado, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnExcluirEmpregado, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnSolicitarEmprestimo, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 298, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 54, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnSair, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnNovoEmpregado, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(27, 27, 27))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

	private void btnMostrarEmpregadoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMostrarEmpregadoActionPerformed
		SupportWindow.mostrarMensagem( "Falta Implementar!" );
	}//GEN-LAST:event_btnMostrarEmpregadoActionPerformed

	private void btnExcluirEmpregadoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirEmpregadoActionPerformed
		try
		{
			List< String > arrCPFsSelecionados = getCPFsEmpregadosSelecionados();

			if( arrCPFsSelecionados.isEmpty() )
				SupportWindow.mostrarMensagem( Const.getString( "SELECIONE_EMPREGADO" ) );
			else
			{
				int resposta = SupportWindow.mostrarMensagemConfirmacao( Const.getString( "CONFIRMA_EXCLUIR_EMPREGADOS" ) );
				
				if( resposta == SupportWindow.OPCAO_SIM )
				{
					excluirEmpregados( arrCPFsSelecionados );
					atualizar();
				}
			}
		}
		catch (Exception ex) {
			SupportWindow.mostrarMensagemErro( ex );
		}
	}//GEN-LAST:event_btnExcluirEmpregadoActionPerformed

	private void btnNovoEmpregadoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNovoEmpregadoActionPerformed
		DlgIncluirEmpregado dlgIncluirEmpregado = new DlgIncluirEmpregado(this, true);
		dlgIncluirEmpregado.setVisible(true);
	}//GEN-LAST:event_btnNovoEmpregadoActionPerformed

	private void btnSairActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSairActionPerformed
		SupportWindow.finalizarPrograma();
	}//GEN-LAST:event_btnSairActionPerformed

	private void btnSolicitarEmprestimoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSolicitarEmprestimoActionPerformed
		List< String > arrCPFsSelecionados = getCPFsEmpregadosSelecionados();
		DlgSolicitarEmprestimo dlgSolicitarEmprestimo = new DlgSolicitarEmprestimo( frame, true, arrCPFsSelecionados.get(0) );
		dlgSolicitarEmprestimo.setVisible( true );
	}//GEN-LAST:event_btnSolicitarEmprestimoActionPerformed

	private static FrmListaEmpregados frame;
	
	public static void main(String args[]) 
	{
		// Set the Nimbus look and feel
		//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
		 * If
		 * Nimbus
		 * (introduced
		 * in
		 * Java
		 * SE
		 * 6)
		 * is
		 * not
		 * available,
		 * stay
		 * with
		 * the
		 * default
		 * look
		 * and
		 * feel.
		 * For
		 * details
		 * see
		 * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
		 */
		try {
			for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
				if ("Nimbus".equals(info.getName())) {
					javax.swing.UIManager.setLookAndFeel(info.getClassName());
					break;
				}
			}
		} catch (ClassNotFoundException ex) {
			java.util.logging.Logger.getLogger(FrmListaEmpregados.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
		} catch (InstantiationException ex) {
			java.util.logging.Logger.getLogger(FrmListaEmpregados.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
		} catch (IllegalAccessException ex) {
			java.util.logging.Logger.getLogger(FrmListaEmpregados.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
		} catch (javax.swing.UnsupportedLookAndFeelException ex) {
			java.util.logging.Logger.getLogger(FrmListaEmpregados.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
		}
		//</editor-fold>

		// Create and display the form
		java.awt.EventQueue.invokeLater(new Runnable() 
		{
			@Override
			public void run() {
				frame = new FrmListaEmpregados();
				frame.setVisible(true);
				SupportWindow.centralizaJanela( frame );
			}
		});
	}
	
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnExcluirEmpregado;
    private javax.swing.JButton btnMostrarEmpregado;
    private javax.swing.JButton btnNovoEmpregado;
    private javax.swing.JButton btnSair;
    private javax.swing.JButton btnSolicitarEmprestimo;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JTable tblEmpregados;
    // End of variables declaration//GEN-END:variables

	static public void atualizar()
	{
		frame.initForm();
	}

	//-------------------------------------------------------------------------
	// métodos private
	//-------------------------------------------------------------------------	
	private void initForm()
	{
		try {
			List< Empregado > empregados = EmpregadoServices.lerEmpregados( DAOFactory.getEmpregadoDAO() );
			SupportWindow.limparTabela( tblEmpregados );
			preencherTabelaEmpregados(empregados);
		}
		catch (Exception ex) {
			SupportWindow.mostrarMensagemErro( ex );
		}
	}
	
	private void preencherTabelaEmpregados(List<Empregado> empregados)
	{
		for (int line=0; line < empregados.size(); line++)
		{
			Empregado empregado = empregados.get(line);
			gravaEmpregadosNaTabela( empregado, line );
		}
	}

	private void gravaEmpregadosNaTabela(Empregado empregado, int line)
	{
		tblEmpregados.setValueAt(empregado.getCpf(), line, Const.COLUNA_CPF);
		tblEmpregados.setValueAt(empregado.getNome(), line, Const.COLUNA_NOME);
		tblEmpregados.setValueAt(empregado.getSexo().getNome(), line, Const.COLUNA_SEXO);
		tblEmpregados.setValueAt(Util.toString(empregado.getDataAdmissao()), line, Const.COLUNA_DATA_ADMISSAO);
	}
	
	private List< String > getCPFsEmpregadosSelecionados()
	{
		List< String > arrCPFsSelecionados = new ArrayList<>();
		
		for( int indLinhasSel : tblEmpregados.getSelectedRows() )
			arrCPFsSelecionados.add( (String)tblEmpregados.getValueAt( indLinhasSel, Const.COLUNA_CPF ) );
		
		return arrCPFsSelecionados;
	}

	private void excluirEmpregados(List<String> arrCPFsSelecionados) throws FileNotFoundException 
	{
		for( String cpf : arrCPFsSelecionados )
			EmpregadoServices.excluirEmpregado( DAOFactory.getEmpregadoDAO(), cpf );
	}
}
